package taller.dataLayer.entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;

import taller.dataLayer.vo.FacturaVO;
import taller.dataLayer.vo.ItemFacturaVO;

@Entity
public class Factura implements Serializable {
	@Id
	private Integer numero;
	private Date fechaEmision;
	private Integer numeroOficinaDeVenta;
	private String condicionVenta;
	private Float total;
	private Float subTotal;
	private Float recargo;
	private Float descuento;
	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "factura_numero")
	private List<ItemFactura> items;
	private static final long serialVersionUID = 1L;

	public Factura() {
		items = new ArrayList<ItemFactura>();
	}  
	public FacturaVO getVO(){
		List<ItemFacturaVO> itemsVO = new ArrayList<ItemFacturaVO>();
		
		for (ItemFactura itemFactura : items) {
			ItemFacturaVO itemVO = itemFactura.getVO();
			itemsVO.add(itemVO);
		}
		
		FacturaVO facturaVO = new FacturaVO(this.numero, this.fechaEmision, this.numeroOficinaDeVenta,
				this.condicionVenta, this.total, this.subTotal, this.recargo, this.descuento, itemsVO);
		
		return facturaVO;
	}
	
	public void setVO(FacturaVO facturaVO){
		List<ItemFactura> items = new ArrayList<ItemFactura>();
		
		List<ItemFacturaVO> itemsVO = facturaVO.getItems();
		for (ItemFacturaVO itemFacturaVO : itemsVO) {
			ItemFactura item = new ItemFactura();
			item.setVO(itemFacturaVO);
			items.add(item);
		}

		this.condicionVenta = facturaVO.getCondicionVenta();
		this.descuento = facturaVO.getDescuento();
		this.fechaEmision = facturaVO.getFechaEmision();
		this.items = items;
		this.numero = facturaVO.getNumero();
		this.numeroOficinaDeVenta = facturaVO.getNumeroOficinaDeVenta();
		this.recargo = facturaVO.getRecargo();
		this.subTotal = facturaVO.getSubTotal();
		this.total = facturaVO.getTotal();
	}
	
	public Integer getNumero() {
		return this.numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}   
	
	public Date getFechaEmision() {
		return this.fechaEmision;
	}

	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}   
	
	
	public String getCondicionVenta() {
		return this.condicionVenta;
	}

	public void setCondicionVenta(String condicionVenta) {
		this.condicionVenta = condicionVenta;
	}   
	
	public Float getTotal() {
		return this.total;
	}

	public void setTotal(Float total) {
		this.total = total;
	}   
	
	public Float getSubTotal() {
		return this.subTotal;
	}

	public void setSubTotal(Float subTotal) {
		this.subTotal = subTotal;
	}   
	
	public Float getRecargo() {
		return this.recargo;
	}

	public void setRecargo(Float recargo) {
		this.recargo = recargo;
	}   
	
	public Float getDescuento() {
		return this.descuento;
	}

	public void setDescuento(Float descuento) {
		this.descuento = descuento;
	}   
	
	public List<ItemFactura> getItems() {
		return this.items;
	}

	public void setItems(List<ItemFactura> items) {
		this.items = items;
	}
	
	public Integer getNumeroOficinaDeVenta() {
		return numeroOficinaDeVenta;
	}
	
	public void setNumeroOficinaDeVenta(Integer numeroOficinaDeVenta) {
		this.numeroOficinaDeVenta = numeroOficinaDeVenta;
	}
   
}
